package collection.stream;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;

/**
 * JDK8之后，Stream流
 * */
public class StreamApiDemo {
    public static void main(String[] args) {
        // 往集合里面放入10个随机数
        Random raandom = new Random();
        List<Integer> list = new ArrayList();
        for (int i = 0; i < 10; i++){
            list.add(raandom.nextInt(20));
        }
        System.out.println("原集合："+ list);
        /*
            常见的中间环节
            1.map 方法

         */
        // 对集合进行流式操作，但是原始集合是没有变化的
        List<Integer> list2 = list.stream()  // 将集合变为一个流
                .map(e -> e*3 ) // 添加map中间环节，对每个元素进行处理
                .collect(Collectors.toList()); // 终端环节
        System.out.println("map()后的集合：" + list2);

        /*
         2.filter 方法
         */
        List<Integer> list3 = list.stream()
                .filter(e -> e%2 == 0)
                .collect(Collectors.toList());
        System.out.println("filter()后的集合：" + list3);

        /*
         3.distinct 方法 对集合去重
         */
        List<Integer> list4 = list.stream()
                .distinct()
                .collect(Collectors.toList());
        System.out.println("distinct()后的集合：" + list4);
        /*
         4.sorted 方法，接收一个表达式用于计算表达式
         */
        List<Integer> list5 = list.stream()
                .sorted((e1,e2)->e2-e1)
                .collect(Collectors.toList());
        System.out.println("sorted()后的集合:"+list5);

        // 需求：将集合所有的元素扩大三倍，筛选是偶数，然后去重后的元素进行降序排序，
        List<Integer> list6 = list.stream()
                .map(e -> e*3)
                .filter(e -> e%2 == 0)
                .distinct()
                .sorted((e1,e2)->e2-e1)
                .collect(Collectors.toList());
        System.out.println("list6:"+list6);

    }
}
